The specific moments a component mounts, updates, and unmounts.
Class components expose specific methods tied to three phases: mounting (constructor, render, componentDidMount), updating (render, componentDidUpdate), and unmounting (componentWillUnmount). Less common ones like getDerivedStateFromProps exist for narrow cases — syncing state from props in rare situations — and are intentionally awkward to use, since most 'derived state' problems are better solved by computing the value during render instead of storing it in state at all.
useEffect approximates these phases in function components, but the mapping isn't exact: an effect with an empty dependency array runs after mount, a cleanup function runs before unmount (and before every subsequent effect re-run), and effects with dependencies re-run on update. The subtlety interviewers actually probe for is timing — componentDidMount runs synchronously before the browser paints, while a plain useEffect runs after paint, which is why useLayoutEffect exists for the rare cases where that distinction actually matters.
What you'll walk away knowing